// 数据库
// express
// 验证:class-validator

// import { validate } from "class-validator";
// import { Movie } from './entities/Movie';
// import { plainToClass } from "class-transformer";

// const m = new Movie();
// const m: any = {};
// m.name = "ctx";
// m.types = [2, 3, 4];
// m.areas = ["中国大陆"];
// m.timeLong = 2;
// m.isClassic = true;

// 将plain Object转换为Movie的对象
// const movie = plainToClass(Movie, m as object);
// // console.log(movie);
// validate(movie).then(errors => {
//     console.log(errors);
// });

// reflect-metadata

import "reflect-metadata";
import { MovieModel } from "./db/index";
import { Movie } from "./entities/Movie";
import { MovieService } from "./services/MovieService";
// 数据库:mongodb 、 mongose

// 对TS的支持不是太好

// 其他的数据库驱动：typeorm(完全使用ts编写的，基于类)，对mongodb支持不好

// MovieModel.find().then(ms => {
//     console.log(ms);
// });

// const m = new Movie();
// m.name = "Sdfs";

// m.validateThis().then(err => {
//     console.log(err);
// });

// const m: any = {
//     name: "sdf",
//     poster: "sfsdf",
//     description: "asdfdwa",
//     timeLong: 33,
//     types: ["喜剧"],
//     areas: ["中国大陆"]
// }

// MovieService.addMovie(m).then(result => {
//     // let r: Exclude<typeof result, string[]> = result;
//     if (Array.isArray(result)) {
//         console.log(result);
//     } else {
//         console.log(result._id);
//     }
// });

// const m: any = {
//     name: "zhan",
// };

// MovieService.edit("5da04cc16d7dc633b8016443", m).then(result => {
//     console.log(result);
// });

// MovieService.delete("5da04cc16d7dc633b8016443").then( result =>{
//     console.log(result);
// });

// MovieService.findById("5da08784034fb625484aecfa").then(result => {
//     console.log(result);
// });

// function getRandom(min: number, max: number) {
//     const dec = max - min;
//     return Math.floor(Math.random() * dec + min);
// }

// for (let i = 0; i < 100; i++) {
//     const m = new Movie();
//     m.name = "电影" + (i + 1);
//     m.areas = ["中国大陆", "美国"];
//     m.types = ["喜剧", "动作"];
//     m.isClassic = true;
//     m.isHot = false;
//     m.isComing = false;
//     m.timeLong = getRandom(70, 240);
//     MovieService.addMovie(m);
// }

// const condi: any = {
//     page: 2,
//     limit: 5,
//     key: "1"
// };

// MovieService.find(condi).then(result => {
//     if (result.errors.length > 0) {
//         console.log(result.errors);
//     }
//     else {
//         result.data.forEach(m => {
//             console.log(m.name);
//         });
//         console.log("总数:" + result.count);
//     }
// });

// express、koa2

import Express from "express";
import MovieRouter from "./routes/MovieRoute";
import UploadRouter from "./routes/UploadRoute";
import history from "connect-history-api-fallback";

const app = Express();
app.use(history());
app.use("/", Express.static("public/build"));
app.use("/upload", Express.static("public/upload"));

app.use(Express.json()); // 配置中间件,用于解析请求消息体中的json格式数据

// postman进行测试
app.use("/api/movie", MovieRouter);
// 文件上传
// 通常情况下，服务器会提供一个统一的api的忌口，用于处理上传的文件
app.use("/api/upload", UploadRouter);

app.listen(3000);
